/**
 * 日志配置文件
 */
const log4js = require('log4js');

// 日志配置
log4js.configure({
  replaceConsole: true,
  // 日志输出
  appenders: {
    // 标准输出
    stdout: {
      type: 'console' // 控制台输出
    },
    // 请求日志
    request: {
      type: 'dateFile', // 类型，指定日志文件按时间打印
      filename: 'logs/reqlog/req', // 指定输出文件路径
      pattern: 'yyyy-MM-dd.log',
      alwaysIncludePattern: true
    },
    // 错误日志
    error: {
      type: 'dateFile',
      filename: 'logs/errlog/err',
      pattern: 'yyyy-MM-dd.log',
      alwaysIncludePattern: true
    },
    // 其他日志
    other: {
      type: 'dateFile',
      filename: 'logs/othlog/oth',
      pattern: 'yyyy-MM-dd.log',
      alwaysIncludePattern: true
    }
  },
  // 日志分类
  categories: {
    default: {
      appenders: ['stdout', 'request'], // appenders 设置为数组取 appenders 对象种属性名
      level: 'debug' // level 为输出设置级别
    },
    error: {
      appenders: ['stdout', 'error'],
      level: 'error'
    }
  }
});

/**
 * 获取一只打印类型笔
 * @param {*} name categories 的属性名
 * @returns
 */
exports.getLogger = function (name = 'default') {
  return log4js.getLogger(name);
};

/**
 * 日志处理勾子函数
 * @param {*} app
 * @param {*} logger
 */
exports.useLogger = function (app, logger) {
  app.use(
    log4js.connectLogger(logger || log4js.getLogger('default'), {
      // 自定义输出格式
      format:
        '[:remote-addr :method :url :status :response-timems][:referrer HTTP/:http-version :user-agent]'
    })
  );
};
